home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
351-375
/
disk_353
/
aztecarp
/
_exit.c
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
2KB
|
74 lines
/* Created 11/08/87 by -=+SDB+=- from file provided by MANX */
/* Copyright (C) 1987 by Scott Ballantyne */
/* May be freely used by ARP supporters/users */
/* If somebody were to modify the libraries to use ARP tracking, this would
* be even shorter (and so would the libraries)
*/
extern int _argc;
extern char **_argv;
extern struct WBStartup *WBenchMsg;
extern void *MathBase, *MathTransBase,*DOSBase;
extern void *MathIeeeDoubBasBase, *MathIeeeDoubTransBase;
extern void *_oldtrap, **_trapaddr;
extern char __sloppy__;
void (*_cln)();
void
_exit(int code)
{
long ret = code;
register int fd;
if (_devtab) {
for (fd = 0 ; fd < _numdev ; fd++)
close(fd);
}
if (_cln) /* needed to block loading 2 instances of _exit() if c.lib/malloc() gets loaded instead */
(*_cln)();
#if 0 /* is now Tracked */
if (_detach_curdir) /* for DETACHed programs */
UnLock((BPTR)_detach_curdir);
#endif
if (_trapaddr) /* clean up signal handling */
*_trapaddr = _oldtrap;
if (MathTransBase)
CloseLibrary((struct Library *)MathTransBase);
if (MathBase)
CloseLibrary((struct Library *)MathBase);
if (MathIeeeDoubBasBase)
CloseLibrary((struct Library *)MathIeeeDoubBasBase);
if (MathIeeeDoubTransBase)
CloseLibrary((struct Library *)MathIeeeDoubTransBase);
if (__sloppy__ && DOSBase)
CloseLibrary((struct Library *)DOSBase);
{
#asm
mc68881
move.l 4,a6 ;get ExecBase
btst.b #4,$129(a6) ;check for 68881 flag in AttnFlags
beq 1$ ;skip if not
move.l a5,-(sp)
lea 2$,a5
jsr -30(a6) ;do it in supervisor mode
move.l (sp)+,a5
bra 1$
2$
clr.l -(sp)
frestore (sp)+ ;reset the ffp stuff
rte ;and return
1$
#endasm
}
if (WBenchMsg)
{
Forbid();
ReplyMsg((struct Message *)WBenchMsg);
}
ArpExit( ret , 0L); /* Exit, and free memory */
}